#pragma once
#pragma warning(disable: 4018 4819)

#include "targetver.h"

#include <windows.h>
#include <windowsx.h>
#pragma  comment(lib, "imm32.lib")
#include <Shlwapi.h>
#pragma  comment(lib, "shlwapi.lib")
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <string>
#include <ostream>
#include <iosfwd>
#include <iostream>
#include <sstream>
#include <strstream>
#include <fstream>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <boost/function.hpp>
#include <boost/signals2.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/any.hpp>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/regex.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_comparison.hpp>
#include <boost/bind.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/program_options/detail/utf8_codecvt_facet.hpp>//utf8 for wptree
#include <boost/assign.hpp>
#include <boost/format.hpp>
#include <boost/foreach.hpp>
#include <boost/bimap.hpp>

#define foreach         BOOST_FOREACH
#define reverse_foreach BOOST_REVERSE_FOREACH


using namespace std;
using namespace boost::assign;// for += etc.
using boost::weak_ptr;
using boost::shared_ptr;
using boost::make_tuple;
using boost::tuple;
using boost::any;
using boost::any_cast;
using boost::tie;

#define null	0
typedef wchar_t Char;
//typedef bool boolean;
typedef unsigned int uint;
typedef unsigned long ulong;




#include "util/Util.h"
#include "util/KeyID.h"
#include "util/AutoLock.h"
#include "util/Timer.h"
#include "util/Notify.h"
#include "util/MenuBuilder.h"
#include "util/InstanceTackable.h"
#include "util/RefString.h"
typedef RefString<wchar_t> String;

#include "util/Log.h"



